/**
 * 时间格式化工具函数
 * 用于将ISO 8601时间格式转换为标准中文时间格式
 */

export class TimeUtil {
  /**
   * 格式化时间为 YYYY-MM-DD HH:mm:ss 格式
   * @param dateString ISO时间字符串或Date对象
   * @returns 格式化后的时间字符串
   */
  static formatDateTime(dateString: string | Date): string {
    if (!dateString) return '';
    
    const date = new Date(dateString);
    
    // 检查是否是有效日期
    if (isNaN(date.getTime())) return '无效时间';
    
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  }
  
  /**
   * 格式化时间为 YYYY-MM-DD 格式
   * @param dateString ISO时间字符串或Date对象
   * @returns 格式化后的日期字符串
   */
  static formatDate(dateString: string | Date): string {
    if (!dateString) return '';
    
    const date = new Date(dateString);
    
    // 检查是否是有效日期
    if (isNaN(date.getTime())) return '无效时间';
    
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    
    return `${year}-${month}-${day}`;
  }
  
  /**
   * 格式化用户对象中的时间字段
   * @param user 用户对象
   * @returns 格式化时间后的用户对象
   */
  static formatUserTimeFields<T extends { createdAt?: any; updatedAt?: any }>(user: T): T {
    if (!user) return user;
    
    return {
      ...user,
      createdAt: user.createdAt ? this.formatDateTime(user.createdAt) : user.createdAt,
      updatedAt: user.updatedAt ? this.formatDateTime(user.updatedAt) : user.updatedAt,
    };
  }
  
  /**
   * 格式化用户数组中的时间字段
   * @param users 用户数组
   * @returns 格式化时间后的用户数组
   */
  static formatUserListTimeFields<T extends { createdAt?: any; updatedAt?: any }>(users: T[]): T[] {
    if (!Array.isArray(users)) return users;
    
    return users.map(user => this.formatUserTimeFields(user));
  }
}